/*
 * Copyright (c) 2006-2021, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2023-07-01     18421       the first version
 */
#ifndef APPLICATIONS_APP_NETUPDATA_H_
#define APPLICATIONS_APP_NETUPDATA_H_

#include "rtthread.h"
#include "stdio.h"


typedef struct {
    uint8_t type;            //数据上报类型
    uint8_t reason;          //BizType出发来源
}msgStruct;


struct updataAllStruct{
    uint8_t BizType; // 0上线触发、1按键触发、2指令下发触发、3阈值或异常触发、4定时触发

    uint8_t Electric; // 0标识没通电；1标识通电
    // 8条控制线路
    // 每条线路的按键及远程开关状态：0关；1开。8个元素标识8条线路的按键开关状态
    uint8_t SwSta[8];
    // 每条线路的模式分三个档位：1强制开、0强制关、2可遥控。8个元素标识8条线路的模式
    uint8_t ForceSta[8]; // 受控模式
    int Signal;  // 信号强度
    uint32_t OtaVersion;  // 固件版本
    char ICCID[21];

};

struct UpEvents{
    uint8_t BizType; // 3阈值或异常触发
    uint8_t EventType;  // // 事件类型，异常停电告警1，缺相告警6
    uint8_t CtrlPort;  // 线路编号，如果是智能控制器本身，则此项值填0


};

struct UpCtrlPortsSwitch{
    uint8_t  BizType;     // 1按键触发、2指令下发触发(这里只用1)
    uint8_t  HandleType; // 当为按键触发时传此项，触发类型：1按键开关、2模式切换
    uint8_t  CtrlPort; // 线路编号是从1~8，0作为全部
    uint8_t  SwitchState; //  // 开关状态：0关；1开
    uint8_t  ForceState; // 分三个档位：1强制开、0强制关、2可遥控
};



struct UpSensorData{
    uint8_t  BizType;     // 1按键触发、2指令下发触发、4定时触发
    float  temperature; // 水体温度
    float  oxygen_ratio; // 水体溶氧比
    float  oxygen_value; // 水体溶氧值

};
struct UpOtaSta{
    int status;
//    1   等待升级
//    2   升级中
//    3   升级完成
//    -1  升级失败

};

//平台控制指令反馈
struct backCmdStruct
{
    uint16_t code;  //执行失败304，执行成功200
    char id[20];
};
rt_uint8_t updataNotify(uint8_t type, uint8_t reason);
rt_uint8_t updata_urgent_Notify(uint8_t type, uint8_t reason);

rt_uint8_t netupdataEntry(void);
void updata_SensorStruct_Set(struct UpSensorData *stu);
void updata_EventStruct_Set(struct UpEvents *stu);
void updata_SwStaStruct_Set(struct UpCtrlPortsSwitch *stu);
void updata_AllStruct_Set(struct updataAllStruct *stu);
void updata_cmdReback(uint8_t result,const char* id ,uint8_t reason);
void updata_otaStaStruct_Set(int status);

#endif /* APPLICATIONS_APP_NETUPDATA_H_ */
